package com.roncoo.esho.dataaggr.rabbitmq;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

@Component
@RabbitListener(queues = "data-aggr-change-queue")
public class DataAggrChangeQueueReceiver {

	@Autowired
	private JedisPool jedisPool;
	
	@RabbitHandler
	public void process(String message) {
		// 商品基本信息，品牌，类型，属性，规格变化，都要重新更新聚合数据
		JSONObject messageJson = JSONObject.parseObject(message);
		String dataType = messageJson.getString("dim_type");
		if("brand".equals(dataType)) {
			processBrandDimDataChange(messageJson);
		}else if("category".equals(dataType)) {
			processCategoryDimDataChange(messageJson);
		} else if("product_intro".equals(dataType)) {
			processProductIntroDimDataChange(messageJson);
		} else if("product".equals(dataType)) {
			// 商品属性，规格变化 ，要重构整个商品维护的数据
			processProductDimDataChange(messageJson);
		}
	}
	
	
	/**
	 * 重建品牌维度缓存
	 * @param messageJson
	 */
	public void processBrandDimDataChange(JSONObject messageJson) {
		Long id = messageJson.getLong("id");
		Jedis jedis = jedisPool.getResource();
		// 从缓存中取出品牌数据，进行聚合处理，然后放入品牌维护
		
		String dataJson = jedis.get("brand_" + id);
		if(dataJson != null && !"".equals(dataJson.trim())) {
			// 这里是原封不动，
			jedis.set("dim_brand_" + id, dataJson);
		} else {
			// 缓存中没有数据，则把维护数据清空，前台请求会回源，重建缓存
			jedis.del("dim_brand_" + id);
		}
	}
	
	public void processCategoryDimDataChange(JSONObject messageJson) {
		Long id = messageJson.getLong("id");
		Jedis jedis = jedisPool.getResource();
		// 从缓存中取出品牌数据，进行聚合处理，然后放入品牌维护
		
		String dataJson = jedis.get("category_" + id);
		if(dataJson != null && !"".equals(dataJson.trim())) {
			// 这里是原封不动，
			jedis.set("dim_category_" + id, dataJson);
		} else {
			// 缓存中没有数据，则把维护数据清空，前台请求会回源，重建缓存
			jedis.del("dim_category_" + id);
		}
	}
	
	public void processProductIntroDimDataChange(JSONObject messageJson) {
		Long id = messageJson.getLong("id");
		Jedis jedis = jedisPool.getResource();
		// 从缓存中取出品牌数据，进行聚合处理，然后放入品牌维护
		
		String dataJson = jedis.get("product_intro_" + id);
		if(dataJson != null && !"".equals(dataJson.trim())) {
			// 正常情况下，商品详情中，会有一些品牌介绍；商品辅助属性；图文介绍
			jedis.set("dim_product_intro_" + id, dataJson);
		} else {
			// 缓存中没有数据，则把维护数据清空，前台请求会回源，重建缓存
			jedis.del("dim_product_intro_" + id);
		}
	}
	
	
	/**
	 * 处理商品维度数据
	 * @param messageJson
	 */
	public void processProductDimDataChange(JSONObject messageJson) {
		Long id = messageJson.getLong("id");  
    	Jedis jedis = jedisPool.getResource();
    	String productDataJSON = jedis.get("product_" + id);
    	if(productDataJSON != null && !"".equals(productDataJSON.trim())) {
    		JSONObject productDataJSONObject = JSONObject.parseObject(productDataJSON);
    		String productPropertyDataJson = jedis.get("product_property_" + id);
    		if(productPropertyDataJson != null && !"".equals(productPropertyDataJson)) {
    			productDataJSONObject.put("product_property", JSONObject.parse(productPropertyDataJson));
    		}
    		String productSpecificationDataJson = jedis.get("product_specification_" + id);
    		if(productSpecificationDataJson != null && !"".equals(productSpecificationDataJson)) {
    			productDataJSONObject.put("product_specification", JSONObject.parse(productSpecificationDataJson));
    		}
    		// 如果缓存中没商品属性，规格的缓存，则保持原有的缓存
    		jedis.set("dim_product_" + id, productDataJSONObject.toJSONString());
    	} else {
    		jedis.del("dim_product_" + id);
    	}
    	
	}
	
}
